diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
index 92fe4affb9..3f21e59418 100644
--- a/django/db/models/deletion.py
+++ b/django/db/models/deletion.py
@@ -272,8 +272,9 @@ class Collector:
         deleted_counter = Counter()
 
         # Optimize for the case with a single obj and no dependencies
-        if len(self.data) == 1 and len(instances) == 1:
-            instance = list(instances)[0]
+        if len(self.data) == 1:
+            model, instances = next(iter(self.data.items()))
+            instance = next(iter(instances))
             if self.can_fast_delete(instance):
                 with transaction.mark_for_rollback_on_error():
                     count = sql.DeleteQuery(model).delete_batch([instance.pk], self.using)
@@ -316,12 +317,10 @@ class Collector:
                             sender=model, instance=obj, using=self.using
                         )
 
-        # update collected instances
-        for instances_for_fieldvalues in self.field_updates.values():
-            for (field, value), instances in instances_for_fieldvalues.items():
-                for obj in instances:
-                    setattr(obj, field.attname, value)
+        # Update collected instances
         for model, instances in self.data.items():
-            for instance in instances:
-                setattr(instance, model._meta.pk.attname, None)
+            # Check if the model has no dependencies before setting PK to None
+            if not self.dependencies.get(model._meta.concrete_model):
+                for instance in instances:
+                    setattr(instance, model._meta.pk.attname, None)
         return sum(deleted_counter.values()), dict(deleted_counter)
